package cn.iocoder.yudao.module.system.service.dict;

import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExtListReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataExtSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataExtDO;

import java.util.Collection;
import java.util.List;

public interface DictDataExtService {

    /**
     * 创建部门
     *
     * @param createReqVO 部门信息
     * @return 部门编号
     */
    Long createDictDataExt(DictDataExtSaveReqVO createReqVO);

    /**
     * 更新部门
     *
     * @param updateReqVO 部门信息
     */
    void updateDictDataExt(DictDataExtSaveReqVO updateReqVO);

    /**
     * 删除部门
     *
     * @param id 部门编号
     */
    void deleteDictDataExt(Long id);

    /**
     * 获得部门信息
     *
     * @param id 部门编号
     * @return 部门信息
     */
    DictDataExtDO getDictDataExt(Long id);

    /**
     * 获得部门信息数组
     *
     * @param ids 部门编号数组
     * @return 部门信息数组
     */
    List<DictDataExtDO> getDictDataExtList(Collection<Long> ids);

    /**
     * 筛选部门列表
     *
     * @param reqVO 筛选条件请求 VO
     * @return 部门列表
     */
    List<DictDataExtDO> getDictDataExtList(DictDataExtListReqVO reqVO);
    /**
     * 获取字典数据树
     */
    List<DictDataExtDO> getDictDataTree();

    /**
     * 获取子节点列表
     */
    List<DictDataExtDO> getChildren(Long parentId);

    /**
     * 获取父节点
     */
    DictDataExtDO getParent(Long id);

    /**
     * 获取层级
     */
    Integer getLevel(Long id);

    /**
     * 根据字典值递归查询所有子节点
     */
    List<DictDataExtDO> getChildrenByParentId(Long parentId);


    /**
     * 获得指定的字典数据
     *
     * @param dictType 字典类型
     * @param value    字典数据值
     * @return 字典数据
     */
    DictDataExtDO getDictData(String dictType, String value);

    /**
     * 解析获得指定的字典数据，从缓存中
     *
     * @param dictType 字典类型
     * @param label    字典数据标签
     * @return 字典数据
     */
    DictDataExtDO parseDictData(String dictType, String label);
}